﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using main.sdk.display.object2d;
using main.sdk.utils;
using Microsoft.Xna.Framework;

namespace main.sdk.utils.animations2D
{
    /**
     * Cria um container de animadores em série. Ao atualizar, ele atualizará cada animador na ordem passada.
     * O método .Active() retornará false quando todos os animadores tiverem terminado.
     * 
     * @usage
     *   // Cria um container para animadores em sério.
     *   SerialAnimator2D serial = new SerialAnimator2D();
     *   serial.Add(animator1)
     *   serial.Add(animator2)
     */
    public class SerialAnimator2D : BaseAnimator2D
    {
        #region Variables

		private List<BaseAnimator2D> m_AnimatorList = new List<BaseAnimator2D>(); 

	    #endregion

        #region Methods
		
        /**
         * Adiciona outro animador.
         */
        public SerialAnimator2D Add(BaseAnimator2D anim)
        {
            m_AnimatorList.Add(anim);
            return this;
        } 
	    #endregion

        #region Overriden Methods
		
        /**
         * Verifica se está ativo
         */
        public override bool Active()
        {
            return (m_AnimatorList.Count > 0);
        }

        /**
         * Limpa os animadores.
         */
        public override void Clear()
        {
            m_AnimatorList.Clear();
        }
 
        /**
         * Atualiza os animadores.
         * 
         * @param Time - Tempo que passou
         */
        public override void Update(double Time)
        {
            /* Se há animadores */
            if (m_AnimatorList.Count > 0)
            {
                /* Atualiza o animador atual */
                m_AnimatorList[0].Update(Time);
                /* Verifica se terminou */
                if (!m_AnimatorList[0].Active())
                    m_AnimatorList.RemoveAt(0);
            }
        } 

	    #endregion
    }
}
